home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Dev / Bgui / AutoDoc / listviewclass.doc < prev    next >
Encoding:
Text File  |  2000-05-09  |  37.0 KB  |  1,424 lines

  1. TABLE OF CONTENTS
  2.  
  3. listviewclass/--background--
  4. listviewclass/BASE_DRAGACTIVE
  5. listviewclass/BASE_DRAGQUERY
  6. listviewclass/BASE_DRAGUPDATE
  7. listviewclass/BASE_DROPPED
  8. listviewclass/BASE_FREEDRAGOBJECT
  9. listviewclass/BASE_GETDRAGOBJECT
  10. listviewclass/LVM_ADDENTRIES
  11. listviewclass/LVM_ADDSINGLE
  12. listviewclass/LVM_CLEAR
  13. listviewclass/LVM_INSERTENTRIES
  14. listviewclass/LVM_INSERTSINGLE
  15. listviewclass/LVM_MOVE
  16. listviewclass/LVM_REDRAW
  17. listviewclass/LVM_REFRESH
  18. listviewclass/LVM_REMENTRY
  19. listviewclass/LVM_REMSELECTED
  20. listviewclass/LVM_REPLACE
  21. listviewclass/LVM_SORT
  22. listviewclass/LVM_[UN]LOCKLIST
  23. listviewclass/LVM_[xxx]ENTRY
  24. listviewclass/LISTV_CompareHook
  25. listviewclass/LISTV_CustomDisable
  26. listviewclass/LISTV_DeSelect
  27. listviewclass/LISTV_DisplayHook
  28. listviewclass/LISTV_DropSpot
  29. listviewclass/LISTV_Entry
  30. listviewclass/LISTV_EntryArray
  31. listviewclass/LISTV_EntryNumber
  32. listviewclass/LISTV_LastClicked
  33. listviewclass/LISTV_LastClickedNum
  34. listviewclass/LISTV_LastColumn
  35. listviewclass/LISTV_ListFont
  36. listviewclass/LISTV_MakeVisible
  37. listviewclass/LISTV_MinEntriesShown
  38. listviewclass/LISTV_MultiSelect
  39. listviewclass/LISTV_MultiSelectNoShift
  40. listviewclass/LISTV_NewPosition
  41. listviewclass/LISTV_NumEntries
  42. listviewclass/LISTV_ReadOnly
  43. listviewclass/LISTV_ResourceHook
  44. listviewclass/LISTV_Select[xxx]
  45. listviewclass/LISTV_Select[xxx]NotVisible
  46. listviewclass/LISTV_ShowDropPos
  47. listviewclass/LISTV_SortEntryArray
  48. listviewclass/LISTV_ThinFrames
  49. listviewclass/LISTV_Title
  50. listviewclass/LISTV_TitleHook
  51. listviewclass/LISTV_Top
  52. listviewclass/LISTV_ViewBounds
  53. listviewclass/PGA_NewLook
  54.  
  55. listviewclass/--background--
  56.  
  57.     NAME
  58.     Class:        listviewclass
  59.     Superclass:    baseclass
  60.     Include File:    <libraries/bgui.h>
  61.  
  62.     FUNCTION
  63.     To  provide a gadget simular to the gadtools.library's listview
  64.     kind.  The lisview  class  does  however have extended functionality
  65.     like  hooks  for  entry  creation,  entry comparrison, entry and title
  66.     rendering.  Also  a  multi-selection mode is available. Opposed to the
  67.     gadtools  version  this  class does not require the usage  of list and
  68.     nodes.    All  kinds of  data  can  be  added to the listview as entries
  69.     providing that you supply hook routines to handle this data.
  70.  
  71.     Objects  from  this  class  send  out the following attribute pairs in
  72.     their notification events:
  73.  
  74.     GA_ID          - Gadget object ID.
  75.     LISTV_Entry      - Pointer to the selected entry.
  76.     LISTV_EntryNumber - Logical number of the selected entry.
  77.     LISTV_LastColumn  - Last column clicked on.
  78.  
  79.     NOTE
  80.     Most  of  the  methods described below can also contain a pointer to a
  81.     GadgetInfo  structure.    This  pointer  does  not have to be valid. All
  82.     actions  will be done only if you want to let the action also be shown
  83.     visually  you  need to pass a valid pointer to a GadgetInfo structure.
  84.  
  85. listviewclass/BASE_DRAGACTIVE
  86.  
  87.     NAME
  88.     BASE_DRAGACTIVE -- This method overides the baseclass method.  To show
  89.         the user that the object  is the  active drop  target  it will
  90.         render a dotted box around the view area instead  of a    dotted
  91.         box arround the hitbox area.
  92.  
  93. listviewclass/BASE_DRAGQUERY
  94.  
  95.     NAME
  96.     BASE_DRAGQUERY -- This method overides the baseclass method.  It  will
  97.         return BQR_ACCEPT when:
  98.  
  99.         1) The request    came  from  itself.  I.E. It will only    accept
  100.             drops from itself.
  101.         2) The LISTV_ShowDropSpot attribute is set to TRUE.
  102.         3) The mouse location is  inside  the  view  area, not    inside
  103.             the scroller object.
  104.  
  105.         Take a look at the supplied demo programs to  see how  you can
  106.         overide this behaviour.
  107.  
  108. listviewclass/BASE_DRAGUPDATE
  109.  
  110.     NAME
  111.     BASE_DRAGUPDATE -- This method overides the baseclass method. When the
  112.         LISTV_ShowDropSpot attribute is set to    TRUE and  the  user is
  113.         dragging the entries over the object, the place at  which they
  114.         can drop the entries is  continually  updated  by  rendering a
  115.         dotted line at that spot.
  116.  
  117. listviewclass/BASE_DROPPED
  118.  
  119.     NAME
  120.     BASE_DROPPED -- This method overides the  baseclass  method.  When the
  121.         user has dropped the entries  this  method  will move  them to
  122.         the location where they were dropped.
  123.  
  124.         Take a look at the supplied demo programs to  see how  you can
  125.         overide this behaviour.
  126.  
  127.  
  128. listviewclass/BASE_FREEDRAGOBJECT
  129.  
  130.     NAME
  131.     BASE_FREEDRAGOBJECT -- This method overides the baseclass method.   It
  132.         simply     deallocated   the   stuff   which   was  setup by the
  133.         BASE_GETDRAGOBJECT method.
  134.  
  135. listviewclass/BASE_GETDRAGOBJECT
  136.  
  137.     NAME
  138.     BASE_GETDRAGOBJECT -- This method overides the baseclass method.  When
  139.         the user starts dragging the selected entries this method will
  140.         create a BitMap in which the dragged entries are displayed.
  141.  
  142.         Up to ten selected entries are shown in the dragged list. When
  143.         there were more than ten entries the  dragged  list  will show
  144.         the following entries:
  145.  
  146.         First Selected Entry
  147.         -->
  148.         Last Selected Entry
  149.  
  150. listviewclass/LVM_ADDENTRIES
  151.  
  152.     NAME
  153.     LVM_ADDENTRIES -- Add multiple entries.
  154.  
  155.     SYNOPSIS
  156.     err = DoMethod( obj, LVM_ADDENTRIES, gi, entries, how )
  157.  
  158.     ULONG            err;
  159.     struct GadgetInfo      *gi;
  160.     APTR               *entries;
  161.     ULONG            how;
  162.  
  163.     FUNCTION
  164.     This method  can be used to add more than one entry after the listview
  165.     object has been created.
  166.  
  167.     INPUTS
  168.     gi    - A pointer to the GadgetInfo structure or NULL.
  169.     entries - This    must  point  to a NULL-terminated array of pointers to
  170.         the entries to add.
  171.     how    - Here    you  can  select  where  the  entries  are  added. The
  172.         following positions are possible:
  173.  
  174.         LVAP_HEAD -- The entries are added at the top of the list.
  175.         LVAP_TAIL -- The entries are added at the bottom of the list.
  176.         LVAP_SORTED -- The entries  are added sorted according to  the
  177.             sorting  method active. In the attributes  section  of
  178.             this documentation you can find more about the sorting
  179.             possibilities.
  180.  
  181.     RESULT
  182.     err    - TRUE    uppon  succes  and FALSE if one or more of the entries
  183.         failed to be added.
  184.  
  185.     SEE ALSO
  186.     LVM_ADDSINGLE, LVM_REMENTRY, LISTV_CompareHook
  187.  
  188. listviewclass/LVM_ADDSINGLE
  189.  
  190.     NAME
  191.     LVM_ADDSINGLE --  Add a single entry.
  192.  
  193.     SYNOPSIS
  194.     err = DoMethod( obj, LVM_ADDSINGLE, gi, entry, how, flags )
  195.  
  196.     ULONG            err;
  197.     struct GadgetInfo      *gi;
  198.     APTR            entry;
  199.     ULONG            how;
  200.     ULONG            flags;
  201.  
  202.     FUNCTION
  203.     This method can be used to add a single entry to the  listview    object
  204.     after it has been created.
  205.  
  206.     INPUTS
  207.     gi    - A pointer to the GadgetInfo structure.
  208.     entry    - This must point to the entry which needs to be added    to the
  209.         listview object.
  210.     how    - Please   refer   to  the  LVM_ADDENTRIES  section  for  more
  211.         information on the ways you can add entries.
  212.     flags    - Any of the following flags can be set here:
  213.  
  214.         LVASF_MAKEVISIBLE -- This tell's the lisview object to  scroll
  215.             the  list  to  make  the  added  entry visible.
  216.  
  217.         LVASF_SELECT -- This  tell's  the  listview object to make the
  218.             added entry selected.  This  will  also  automatically
  219.             scroll    the  list  to  make the  added     entry visible
  220.             unless the LVASF_NOT_VISIBLE flag is set.
  221.  
  222.         LVASF_MULTISELECT ** V40 ** -- This  flag only works on multi-
  223.             select listviews.   When   set     the   added  entry is
  224.             selected without  unselecting already selected entries
  225.             in the list.   This flag will also scroll the list  to
  226.             make   the    added    entry    visible    unless  the
  227.             LVASF_NOT_VISIBLE flag is set.
  228.  
  229.         LVASF_NOT_VISIBLE ** V40 ** -- When  set  in  combination with
  230.             the  LVASF_SELECT or LVASF_MULTISELECT flags the added
  231.             entry  is  selected  but  not made visible.
  232.  
  233.     RESULT
  234.     err    - TRUE uppon success, FALSE uppon failure.
  235.  
  236.     SEE ALSO
  237.     LVM_ADDENTRIES, LVM_REMENTRY
  238.  
  239. listviewclass/LVM_CLEAR
  240.  
  241.     NAME
  242.     LVM_CLEAR -- Delete all entries.
  243.  
  244.     SYNOPSIS
  245.     DoMethod( obj, LVM_CLEAR, gi )
  246.  
  247.     struct GadgetInfo    *gi;
  248.  
  249.     FUNCTION
  250.     This  method must be used to clear and delete all  entries  present in
  251.     the list.
  252.  
  253.     INPUTS
  254.     gi    - A pointer to the GadgetInfo structure.
  255.  
  256.     RESULT
  257.     Return code is not defined.
  258.  
  259.  
  260. listviewclass/LVM_INSERTENTRIES
  261.  
  262.     NAME
  263.     LVM_INSERTENTRIES ** V40 ** -- Insert several entries.
  264.  
  265.     SYNOPSIS
  266.     err = DoMethod( obj, LVM_INSERTENTRIES, gi, pos, entries )
  267.  
  268.     ULONG            err;
  269.     struct GadgetInfo      *gi;
  270.     ULONG            pos;
  271.     APTR               *entries;
  272.  
  273.     FUNCTION
  274.     This method is basically the same as the  LVM_ADDENTRIES  method  with
  275.     the  exception that you can specify at which position the entries will
  276.     be inserted  in the list.
  277.  
  278.     INPUTS
  279.     gi    - A pointer to the GadgetInfo structure.
  280.  
  281.     pos    - This must be the numeric position at which you want to  have
  282.         the entries inserted.    The  numbers  can  range from 0 to the
  283.         amount of entries already in the list. If you specify a number
  284.         larger than  the amount of  entries  already in the  list  the
  285.         entries  will be appended to the existing entries.
  286.  
  287.     entries - A  pointer  to  a NULL-terminated array of entry pointers to
  288.         add to the list.
  289.  
  290.     RESULT
  291.     err    - TRUE    uppon  succes  and FALSE if one or more of the entries
  292.         failed to be added.
  293.  
  294.     SEE ALSO
  295.     LVM_ADDENTRIES, LVM_INSERTSINGLE, LVM_REMENTRY
  296.  
  297. listviewclass/LVM_INSERTSINGLE
  298.  
  299.     NAME
  300.     LVM_INSERTSINGLE ** V40 ** -- Insert a single entry.
  301.  
  302.     SYNOPSIS
  303.     err = DoMethod( obj, LVM_INSERTSINGLE, gi, pos, entry, flags )
  304.  
  305.     ULONG            err;
  306.     struct GadgetInfo      *gi;
  307.     ULONG            pos;
  308.     APTR            entry;
  309.     ULONG            flags;
  310.  
  311.     FUNCTION
  312.     This  method  should  be  used    to  insert  a single  entry at a given
  313.     position in the list.  It is basically the same as  the  LVM_ADDSINGLE
  314.     method with the exception that the position of the entry is specified.
  315.  
  316.     INPUTS
  317.     gi    - A pointer to the GadgetInfo structure.
  318.  
  319.     pos    - This must be the  numeric  position  at  which you  want  to
  320.         have  the entry inserted.  The numbers can range from 0 to the
  321.         amount of entries already in the list. If you specify a number
  322.         larger    than  the amount of entries already  in the  list  the
  323.         entry will be appended to the existing entries.
  324.  
  325.     entry    - A pointer to the entry to insert.
  326.  
  327.     flags    - Special flags which  you  can use to make the inserted entry
  328.         visible,  select it,  multi-select  it    etc.   For  a complete
  329.         description  of  the  possibilities  read  the     LVM_ADDSINGLE
  330.         section.
  331.  
  332.     RESULT
  333.     err    - TRUE uppon succes and FALSE uppon failure.
  334.  
  335.     SEE ALSO
  336.     LVM_ADDSINGLE, LVM_INSERTENTRIES, LVM_REMENTRY
  337.  
  338. listviewclass/LVM_MOVE
  339.  
  340.     NAME
  341.     LVM_MOVE ** V38 ** -- Move an entry.
  342.  
  343.     SYNOPSIS
  344.     succ = DoMethod( obj, LVM_MOVE, gi, entry, dir, new )
  345.  
  346.     ULONG            succ;
  347.     struct GadgetInfo      *gi;
  348.     APTR            entry;
  349.     ULONG            dir;
  350.     ULONG            new;
  351.  
  352.     FUNCTION
  353.     This method must be used to move entries in the list.
  354.  
  355.     INPUTS
  356.     gi    - A pointer to the GadgetInfo structure.
  357.  
  358.     entry    - This    can  point to the specific entry you want to move.  If
  359.         you specify NULL here the  selected  entry is moved.
  360.  
  361.     dir    - Here you can specify the direction in  which the entry  must
  362.         be moved.  The following directions are possible:
  363.  
  364.         LVMOVE_UP     -- Move the entry one place up.
  365.         LVMOVE_DOWN   -- Move the entry one place down.
  366.         LVMOVE_TOP    -- Move the entry to the list-top.
  367.         LVMOVE_BOTTOM -- Move the entry to the list-bottom.
  368.         LVMOVE_NEWPOS -- Move the entry to lvmm_NewPos. ** V40 **
  369.  
  370.     new    - This field was added in V40 of the library.  Do  not    use it
  371.         on lower  versions.   This  field  must  contain  the  ordinal
  372.         position number to where the entry is moved.  It  is  used  in
  373.         combination with the LVMOVE_NEWPOS direction constant.
  374.  
  375.     NOTE
  376.     When  the  entry actually moved the class will send out a notification
  377.     message with the following attributes:
  378.  
  379.     GA_ID          -- The ID of the object.
  380.     LISTV_NewPosition -- The new ordinal position of the entry.
  381.  
  382.     RESULT
  383.     succ    - TRUE when the entry moved and FALSE if not.
  384.  
  385. listviewclass/LVM_REDRAW
  386.  
  387.     NAME
  388.     LVM_REDRAW ** V40 ** -- Redraw the list contents.
  389.  
  390.     SYNOPSIS
  391.     DoMethod( obj, LVM_REDRAW, gi )
  392.  
  393.     struct GadgetInfo    *gi;
  394.  
  395.     FUNCTION
  396.     This method is basically the same as the LVM_REFRESH  method described
  397.     above  with  the  exception  that,  instead  of  refreshing  the whole
  398.     listview,  only  the  entries which are visible are refreshed.
  399.  
  400.     INPUTS
  401.     gi    - A pointer to the GadgetInfo structure.
  402.  
  403.     RESULT
  404.     Return code is not defined.
  405.  
  406.     SEE ALSO
  407.     LVM_REFRESH
  408.  
  409. listviewclass/LVM_REFRESH
  410.  
  411.     NAME
  412.     LVM_REFRESH -- Refresh the listview.
  413.  
  414.     SYNOPSIS
  415.     DoMethod( obj, LVM_REFRESH, gi )
  416.  
  417.     struct GadgetInfo    *gi;
  418.  
  419.     FUNCTION
  420.     This  method  must  be    used to refresh the listview object after some
  421.     changes have been made which where not visible. In some cases it might
  422.     be usefull to add entries without passing a GadgetInfo structure along
  423.     with the  adding  methods.  This will speed  up the adding and you can
  424.     show  the  changes  when  you  are  done by sending this method to the
  425.     listview object.
  426.  
  427.     INPUTS
  428.     gi    - A  pointer  to  the  GadgetInfo  structure.  Should be valid
  429.         otherwise this method is not really useful.
  430.  
  431.     RESULT
  432.     Return code is not defined.
  433.  
  434.     SEE ALSO
  435.     LVM_REDRAW
  436.  
  437. listviewclass/LVM_REMENTRY
  438.  
  439.     NAME
  440.     LVM_REMENTRY -- Remove an entry.
  441.  
  442.     SYNOPSIS
  443.     DoMethod( obj, LVM_REMENTRY, gi, entry )
  444.  
  445.     struct GadgetInfo    *gi;
  446.     APTR             entry;
  447.  
  448.     FUNCTION
  449.     This  method  must  be used to remove a single entry from the listview
  450.     object.
  451.  
  452.     INPUTS
  453.     gi    - A pointer to the GadgetInfo structure.
  454.     entry    - This    must  point  to  the  entry  you  want to remove.
  455.  
  456.     RESULT
  457.     Return code is not defined.
  458.  
  459.     SEE ALSO
  460.     LVM_ADDENTRIES, LVM_ADDSINGLE
  461.  
  462. listviewclass/LVM_REMSELECTED
  463.  
  464.     NAME
  465.     LVM_REMSELECTED ** V40 ** -- Remove selected entry.
  466.  
  467.     SYNOPSIS
  468.     succ = DoMethod( obj, LVM_REMSELECTED, gi )
  469.  
  470.     ULONG             succ;
  471.     struct GadgetInfo    *gi;
  472.  
  473.     FUNCTION
  474.     This method can  be used to remove the currently selected  entry  from
  475.     the list and automatically select the next or previous one.
  476.  
  477.     INPUTS
  478.     gi    - A pointer to the GadgetInfo structure.
  479.  
  480.     NOTE
  481.     This method  only operates on single-select listviews. On multi-select
  482.     listviews this method has no effect.
  483.  
  484.     RESULT
  485.     succ    - TRUE if an entry was removed and FALSE if not.
  486.  
  487. listviewclass/LVM_REPLACE
  488.  
  489.     NAME
  490.     LVM_REPLACE ** V39 ** -- Replace an entry by another.
  491.  
  492.     SYNOPSIS
  493.     rep = DoMethod( obj, LVM_REPLACE, gi, old, new )
  494.  
  495.     APTR             rep;
  496.     struct GadgetInfo    *gi;
  497.     APTR             old;
  498.     APTR             new;
  499.  
  500.     FUNCTION
  501.     This method allows you to replace an existing entry with another.
  502.  
  503.     INPUTS
  504.     gi    - A pointer to the GadgetInfo structure.
  505.  
  506.     old    - This must be a pointer to the entry you want to replace.
  507.  
  508.     new    - This must point to the new  data you want to replace the old
  509.         entry by.
  510.  
  511.     RESULT
  512.     rep    - A  pointer  to  the  new  entry uppon success and NULL uppon
  513.         failure.
  514.  
  515. listviewclass/LVM_SORT
  516.  
  517.     NAME
  518.     LVM_SORT -- Sort all entries.
  519.  
  520.     SYNOPSIS
  521.     DoMethod( obj, LVM_SORT, gi )
  522.  
  523.     struct GadgetInfo    *gi;
  524.  
  525.     FUNCTION
  526.     Calling this method  will force a complete re-sorting of  the  entries
  527.     in the list. This can be handy    when your comparisson  hook (described
  528.     in  the  attributes  LISTV_CompareHook    section)  can handle different
  529.     kinds of comparissons.
  530.  
  531.     INPUTS
  532.     gi    - A pointer to the GadgetInfo structure.
  533.  
  534.     RESULT
  535.     Return code is not defined.
  536.  
  537. listviewclass/LVM_[UN]LOCKLIST
  538.  
  539.     NAME
  540.     LVM_LOCKLIST, LVM_UNLOCKLIST -- (Un)lock the listview.
  541.  
  542.     SYNOPSIS
  543.     DoMethod( obj, LVM_LOCKLIST )
  544.     DoMethod( obj, LVM_UNLOCKLIST, gi )
  545.  
  546.     struct GadgetInfo    *gi;
  547.  
  548.     FUNCTION
  549.     These methods must  be used to lock or unlock the list contents. When,
  550.     for example, you must change the text of a list entry you should  lock
  551.     it  using  the    LVM_LOCKLIST  method  and  when you are done unlock it
  552.     using the LVM_UNLOCKLIST method.
  553.  
  554.     This locking is only necessary when you are manipulating  the contents
  555.     of  the  list  entries by hand. Changing the list contents with any of
  556.     the other listview methods do not require you to lock the list.
  557.  
  558.     INPUTS
  559.     gi    - A pointer to the GadgetInfo structure.
  560.  
  561.     RESULT
  562.     No return code is defined.
  563.  
  564. listviewclass/LVM_[xxx]ENTRY
  565.  
  566.     NAME
  567.     LVM_FIRSTENTRY, LVM_LASTENTRY, LVM_NEXTENTRY, LVM_PREVENTRY
  568.  
  569.     SYNOPSIS
  570.     entry = DoMethod( obj, LVM_FIRSTENTRY, NULL, flags )
  571.     entry = DoMethod( obj, LVM_LASTENTRY,  NULL, flags )
  572.     entry = DoMethod( obj, LVM_NEXTENTRY,  prev, flags )
  573.     entry = DoMethod( obj, LVM_PREVENTRY,  prev, flags )
  574.  
  575.     APTR            entry;
  576.     APTR            prev;
  577.     ULONG            flags;
  578.  
  579.     FUNCTION
  580.     These methods must be used to  itterate  through  all  entries    in the
  581.     listview. You can itterate through the entries one by one or  only the
  582.     selected ones.
  583.  
  584.     INPUTS
  585.     prev    - For  the  LVM_FIRSTENTRY and LVM_LASTENTRY methods this must
  586.         be NULL. For the LVM_NEXTENTRY and LVM_PREVENTRY  this    should
  587.         point to the entry returned by a previous call to any of these
  588.         methods.
  589.  
  590.     flags    - Any of the following flags may be set here:
  591.  
  592.         LVGEF_SELECTED -- The    methods  will  only scan  for selected
  593.             entries when this bit is set. All non-selected entries
  594.             will simply be skipped.
  595.  
  596.     RESULT
  597.     entry    - A pointer  to  the  entry or NULL  when  no more entries are
  598.         available.
  599.  
  600.  
  601.     EXAMPLE
  602.     /*
  603.      *    Scan through all entries in
  604.      *    the listview gadget starting
  605.      *    at the first one.
  606.      */
  607.     Object        *listview;
  608.     APTR         entry;
  609.  
  610.     /*
  611.      *    Get first entry.
  612.      */
  613.     if ( entry = (APTR)DoMethod(
  614.                    listview, LVM_FIRSTENTRY, NULL, 0L )) {
  615.         /*
  616.          *    Loop through the rest of the list.
  617.          */
  618.         do {
  619.             /*
  620.              *    Print the entry...
  621.              */
  622.             printf( "Entry = %s\n", entry );
  623.  
  624.             /*
  625.              *    Next entry...
  626.              */
  627.             entry = (APTR)DoMethod(
  628.                  listview, LVM_NEXTENTRY, entry, 0L );
  629.         } while ( entry );
  630.     }
  631.  
  632. listviewclass/LISTV_CompareHook
  633.  
  634.     NAME
  635.     LISTV_CompareHook -- ( struct Hook * )
  636.  
  637.     FUNCTION
  638.     To add a hook routine  that will  compare two  entries with eachother.
  639.     As it is possible  to have  entries  which are    different  from simple
  640.     strings you can perform your own comparison here.  The comparison hook
  641.     is called each time an entry is added  sorted or when  the list is re-
  642.     sorted. The hook routine will be called as follows:
  643.  
  644.     rc = hookFunc( hook, object, message );
  645.     D0           A0    A2      A1
  646.  
  647.     LONG             rc;
  648.     struct Hook        *hook;
  649.     Object            *object;
  650.     struct lvCompare    *message;
  651.  
  652.     The message argument is a pointer to the following data structure:
  653.  
  654.     struct lvCompare {
  655.         APTR        lvc_EntryA;
  656.         APTR        lvc_EntryB;
  657.     };
  658.  
  659.     lvc_EntryA, lvc_EntryB -- These  are the entries that must be compared
  660.         to eachother.
  661.  
  662.     The internal comparison routine simple    does a    stricmp()  on the  two
  663.     entry strings.
  664.  
  665.     This hook must return -1 when entry a is smaller than entry b, 0  when
  666.     entry a is equal to entry b and 1 when entry a is bigger than entry b.
  667.  
  668.     DEFAULT
  669.     NULL (internal comparison routine).
  670.  
  671.     APPLICABILITY
  672.     (I).
  673.  
  674.     SEE ALSO
  675.     LISTV_ResourceHook, LISTV_DisplayHook
  676.  
  677. listviewclass/LISTV_CustomDisable
  678.  
  679.     NAME
  680.     LISTV_CustomDiable -- ( BOOL ) ** V40 **
  681.  
  682.     FUNCTION
  683.     To  tell  the  class  rendering routine that the custom rendering hook
  684.     will take care of the disabled rendering itself.  If  set to FALSE the
  685.     class itself will render a ghosting pattern over the list entries.
  686.  
  687.     Note that this tag only affects objects which have a  custom rendering
  688.     hook installed with LISTV_DisplayHook.
  689.  
  690.     DEFAULT
  691.     FALSE.
  692.  
  693.     APPLICABILITY
  694.     (IS).
  695.  
  696.     SEE ALSO
  697.     LISTV_DisplayHook
  698.  
  699. listviewclass/LISTV_DeSelect
  700.  
  701.     NAME
  702.     LISTV_DeSelect -- ( ULONG ) ** V39 **
  703.  
  704.     FUNCTION
  705.     To deselect a selected entry. The data you pass is the ordinal    number
  706.     of the entry starting at 0 for the  first  entry in the list.  If  you
  707.     supply    a  value  of  ~0  (-1) all  selected  entries  in the list are
  708.     deselected.
  709.  
  710.     APPLICABILITY
  711.     (SU)
  712.  
  713.     SEE ALSO
  714.     LISTV_Select
  715.  
  716. listviewclass/LISTV_DisplayHook
  717.  
  718.     NAME
  719.     LISTV_DisplayHook -- ( struct Hook * )
  720.  
  721.     FUNCTION
  722.     To add a hook routine that will take care of rendering the entries. In
  723.     some  cases  it  is  necessary    to do your own rendering. This hook is
  724.     called for each entry that needs to be rendered. The hook routine will
  725.     be called as follows:
  726.  
  727.     rc = hookFunc( hook, object, message );
  728.     D0           A0    A2      A1
  729.  
  730.     VOID         rc;     /* No return code defined. */
  731.     struct Hook    *hook;
  732.     Object        *object;
  733.     struct lvRender *message;
  734.  
  735.     The message argument is a pointer to the following data structure:
  736.  
  737.     struct lvRender {
  738.         struct RastPort     *lvr_RPort;
  739.         struct DrawInfo     *lvr_DrawInfo;
  740.         struct Rectangle    *lvr_Bounds;
  741.         APTR             lvr_Entry;
  742.         UWORD             lvr_State;
  743.         UWORD             lvr_Flags;
  744.     };
  745.  
  746.     lvr_RPort -- This  is a pointer to the RastPort in which the rendering
  747.         must be done. Please note that the font you must use to render
  748.         text is already set up for you.  It  is  not  recommendable to
  749.         use another font than the one set in this RastPort because the
  750.         height of  the    area  you may render in is setup accoording to
  751.         this font.
  752.  
  753.     lvr_DrawInfo -- This can point    to a  DrawInfo structure as defined in
  754.         <intuition/screens.h> in which the necessay  information about
  755.         the display environment is stored.  Note  that it  is possible
  756.         that this is NULL. It is not very likely but it is possible.
  757.  
  758.     lvr_Bounds -- This is a struct Rectangle in  which the area you should
  759.         render in is defined. Do _not_ render outside the given bounds
  760.         or you will seriously screw up the display!  Also keep in mind
  761.         that the area you are rendering into is not always cleared. In
  762.         other words, the area may still show data from    another entry.
  763.         You must make sure you completely re-render the given bounds.
  764.  
  765.     lvr_Entry -- This  points  to  the  entry  data  as setup by the entry
  766.         creation hook or the built-in entry creation.
  767.  
  768.     lvr_State -- This  describes  the  state in which to render the entry.
  769.         The state is one of the following possibilities:
  770.  
  771.         LVRS_NORMAL -- Normal rendering. Render the entry in a normal,
  772.             un-selected way.
  773.         LVRS_SELECTED -- Selected rendering.  Render  the  entry  in a
  774.             selected way.
  775.         LVRS_NORMAL_DISABLED -- Normal, disabled rendering. Render the
  776.             entry in a normal way but  make it  disabled.  This is
  777.             normally  done    by  ghosting  it  with    a pattern (see
  778.             below).
  779.         LVRS_SELECTED_DISABLED -- Selected, disabled rendering. Render
  780.             the entry is a selected way but make it disabled. This
  781.             is normally done by ghosting  it with  a  pattern (see
  782.             below).
  783.  
  784.         Ghosting the entry is usually done like this:
  785.  
  786.         struct lvRender         *lvr;
  787.         UWORD            *pens = lvr->lvr_DrawInfo->dri_Pens;
  788.         UWORD             patt = { 0x2222, 0x8888 };
  789.  
  790.         SetAPen( lvr->lvr_RPort, pens[ SHADOWPEN ] );
  791.         SetDrMd( lvr->lvr_RPort, JAM1 );
  792.         SetAfPt( lvr->lvr_RPort, patt, 1 );
  793.  
  794.         RectFill( lvr->lvr_RPort, lvr->lvr_Bounds.MinX,
  795.                       lvr->lvr_Bounds.MinY,
  796.                       lvr->lvr_Bounds.MaxX,
  797.                       lvr->lvr_Bounds.MaxY );
  798.  
  799.         Please keep in mind that, although the above code doesn't show
  800.         it, the lvr_DrawInfo field can be NULL.
  801.  
  802.     lvr_Flags -- No flags are defined yet.
  803.  
  804.     When this hook is not set the internal rendering  routine will    simply
  805.     render a string which is created in  the  LIST_ResourceHook.  When the
  806.     LISTV_RenderHook routine creates something other than a  simple string
  807.     pointer you must provide a display hook to render the entries.
  808.  
  809.     Most  of  the  time  when  you    add  more  than a simple string to the
  810.     listview  object  the  data  you add is a structure which contains the
  811.     string    and  some  extra  data.  To prevent you from having to write a
  812.     display-hook  to  render the string your hook can also simply return a
  813.     pointer  to  the  string and the listviewclass will render it for you.
  814.     I.E.:
  815.  
  816.     struct myStruct {
  817.         UBYTE        *string;
  818.         UWORD         some_more_data;
  819.     };
  820.  
  821.     __saveds __asm hookFunc( register __a0 struct Hook     *hook,
  822.                  register __a2 Object           *lv_obj,
  823.                  register __a1 struct lvRender *lvr )
  824.     {
  825.          return((( struct myNode * )lvr->lvr_Entry )->string );
  826.     }
  827.  
  828.     This  hook  will  let the listviewclass dispatcher render the returned
  829.     string    for  you while keeping the extended data available for you. If
  830.     your  hook  returns  NULL  the listviewclass assumes you have done all
  831.     rendering required.
  832.  
  833.     DEFAULT
  834.     NULL (internal entry rendering).
  835.  
  836.     APPLICABILITY
  837.     (I).
  838.  
  839.     SEE ALSO
  840.     LISTV_ResourceHook, LISTV_CompareHook, LISTV_TitleHook
  841.  
  842. listviewclass/LISTV_DropSpot
  843.  
  844.     NAME
  845.     LISTV_DropSpot -- ( ULONG ) ** V40 **
  846.  
  847.     FUNCTION
  848.     To query the position at which the dragged entries were dropped.  When
  849.     the LISTV_ShowDropSpot was set to TRUE and the user  has  dragged some
  850.     entries in this listview this attribute  will  hold  the  ordinal list
  851.     position where the entries were dropped.   This  attribute  is    _only_
  852.     usefull when queried in a BASE_DROPPED method.
  853.  
  854.     APPLICABILITY
  855.     (G).
  856.  
  857.     SEE ALSO
  858.     baseclass.doc/BASE_DROPPED, LISTV_ShowDropPos
  859.  
  860. listviewclass/LISTV_Entry
  861.  
  862.     NAME
  863.     LISTV_Entry -- ( APTR )
  864.  
  865.     FUNCTION
  866.     This  tag  is sent during notification. The data field is a pointer to
  867.     the entry which triggered the notification.
  868.  
  869.     APPLICABILITY
  870.     (N).
  871.  
  872.     SEE ALSO
  873.     LISTV_EntryNumber
  874.  
  875. listviewclass/LISTV_EntryArray
  876.  
  877.     NAME
  878.     LISTV_EntryArray -- ( APTR * )
  879.  
  880.     FUNCTION
  881.     To add a set of entries at initialization time.  The data is a pointer
  882.     to a NULL-terminated array of entries which  need to  be added    to the
  883.     listview object.
  884.  
  885.     DEFAULT
  886.     NULL.
  887.  
  888.     APPLICABILITY
  889.     (I).
  890.  
  891.     SEE ALSO
  892.     LISTV_SortEntryArray
  893.  
  894. listviewclass/LISTV_EntryNumber
  895.  
  896.     NAME
  897.     LISTV_EntryNumber -- ( ULONG )
  898.  
  899.     FUNCTION
  900.     This  tag  is  sent during notification. The data field is the logical
  901.     number of the entry which triggered the notification.
  902.  
  903.     APPLICABILITY
  904.     (N).
  905.  
  906.     SEE ALSO
  907.     LISTV_Entry
  908.  
  909. listviewclass/LISTV_LastClicked
  910.  
  911.     NAME
  912.     LISTV_LastClicked -- ( APTR )
  913.  
  914.     FUNCTION
  915.     To get a pointer to the last selected entry.  This data can be used to
  916.     detect double-clicking and entry.
  917.  
  918.     EXAMPLE
  919.     Object        *listview;
  920.     ULONG         ds[2], dm[2], last = 0, clicked;
  921.  
  922.     GetAttr( LISTV_LastClicked, listview, &clicked );
  923.     if ( clicked == last ) {
  924.         CurrentTime( &ds[ 1 ], &dm[ 1 ] );
  925.         if ( DoubleClick( ds[ 0 ], dm[ 0 ], ds[ 1 ], dm [ 1 ] )) {
  926.             /* Double clicked */
  927.             ...
  928.         }
  929.     }
  930.     CurrentTime( &ds[ 0 ], &dm[ 0 ] );
  931.     last = clicked;
  932.  
  933.     APPLICABILITY
  934.     (G).
  935.  
  936.     SEE ALSO
  937.     LISTV_LastClickedNum
  938.  
  939. listviewclass/LISTV_LastClickedNum
  940.  
  941.     NAME
  942.     LISTV_LastClickedNum -- ( ULONG ) ** V38 **
  943.  
  944.     FUNCTION
  945.     To return the number of the last selected entry.
  946.  
  947.     APPLICABILITY
  948.     (G).
  949.  
  950.     SEE ALSO
  951.     LISTV_LastClicked
  952.  
  953. listviewclass/LISTV_LastColumn
  954.  
  955.     NAME
  956.     LISTV_LastColumn -- ( ULONG )  ** V41 **
  957.  
  958.     FUNCTION
  959.     To get the number of the last column clicked on.  This is useful if
  960.     you need to do different things depending on the column clicked on.
  961.  
  962.     APPLICABILITY
  963.     (G).
  964.  
  965.     SEE ALSO
  966.     LISTV_LastClicked, LISTV_LastClickedNum
  967.  
  968. listviewclass/LISTV_ListFont
  969.  
  970.     NAME
  971.     LISTV_ListFont -- ( struct TextAttr )
  972.  
  973.     FUNCTION
  974.     To set the font which is used to  render the  entries.    By default the
  975.     font  used  to    render    the  entries is the same font which is used to
  976.     render the object it's label. This font might be proportional. In some
  977.     cases  it might be useful to have a mono-space font for the entries or
  978.     even another proportional font.
  979.  
  980.     DEFAULT
  981.     NULL.
  982.  
  983.     APPLICABILITY
  984.     (IG)
  985.  
  986. listviewclass/LISTV_MakeVisible
  987.  
  988.     NAME
  989.     LISTV_MakeVisible -- ( ULONG )
  990.  
  991.     FUNCTION
  992.     To scroll the list to make the entry appear in the display area of the
  993.     listview object. The data required is the logical number of  the entry
  994.     in the list starting with 0 as the first entry.
  995.  
  996.     APPLICABILITY
  997.     (SU).
  998.  
  999. listviewclass/LISTV_MinEntriesShown
  1000.  
  1001.     NAME
  1002.     LISTV_MinEntriesShown -- ( UWORD )
  1003.  
  1004.     FUNCTION
  1005.     To specify how many entries should be visible at all times.  Note: The
  1006.     larger this value the bigger the object it's minimum size.
  1007.  
  1008.     DEFAULT
  1009.     3.
  1010.  
  1011.     APPLICABILITY
  1012.     (I).
  1013.  
  1014. listviewclass/LISTV_MultiSelect
  1015.  
  1016.     NAME
  1017.     LISTV_MultiSelect -- ( BOOL )
  1018.  
  1019.     FUNCTION
  1020.     To make the listview a multi-selection object. Multi-selection objects
  1021.     allow the user to select more than one entry from the list.
  1022.  
  1023.     DEFAULT
  1024.     FALSE.
  1025.  
  1026.     APPLICABILITY
  1027.     (ISU).
  1028.  
  1029. listviewclass/LISTV_MultiSelectNoShift
  1030.  
  1031.     NAME
  1032.     LISTV_MultiSelectNoShift -- ( BOOL ) ** V39 **
  1033.  
  1034.     FUNCTION
  1035.     To allow the user to multi-(de)select the entries in a multi-selection
  1036.     object    without  having  to use the SHIFT key. This tag is only useful
  1037.     when the LISTV_MultiSelect tag is set to TRUE.
  1038.  
  1039.     DEFAULT
  1040.     FALSE.
  1041.  
  1042.     APPLICABILITY
  1043.     (ISU).
  1044.  
  1045.     SEE ALSO
  1046.     LISTV_MultiSelect
  1047.  
  1048. listviewclass/LISTV_NewPosition
  1049.  
  1050.     NAME
  1051.     LISTV_NewPosition -- ( ULONG ) ** V38 **
  1052.  
  1053.     FUNCTION
  1054.     To  notify  the  object  it's  targets  of the entry it's new position
  1055.     number.   When    you  move an entry with the LVM_MOVE method the object
  1056.     will send out a notification message with this attribute.
  1057.  
  1058.     Since V40 of the library this attribute is also  gettable with OM_GET.
  1059.     Please note however that getting this  attribute  will    only give  the
  1060.     desired result _after_ you moved an entry with LVM_MOVE.
  1061.  
  1062.     APPLICABILITY
  1063.     (NG).
  1064.  
  1065.     SEE ALSO
  1066.     LVM_MOVE
  1067.  
  1068. listviewclass/LISTV_NumEntries
  1069.  
  1070.     NAME
  1071.     LISTV_NumEntries ( ULONG ) ** V38 **
  1072.  
  1073.     FUNCTION
  1074.     To return the number of entries in the list.
  1075.  
  1076.     APPLICABILITY
  1077.     (G).
  1078.  
  1079. listviewclass/LISTV_ReadOnly
  1080.  
  1081.     NAME
  1082.     LISTV_ReadOnly -- ( BOOL )
  1083.  
  1084.     FUNCTION
  1085.     To make the listview a read-only object.  Read only objects  have full
  1086.     functionality except for the entries which cannot be selected.
  1087.  
  1088.     DEFAULT
  1089.     FALSE.
  1090.  
  1091.     APPLICABILITY
  1092.     (I).
  1093.  
  1094. listviewclass/LISTV_ResourceHook
  1095.  
  1096.     NAME
  1097.     LISTV_ResourceHook -- ( struct Hook * )
  1098.  
  1099.     FUNCTION
  1100.     To add a hook routine that will build or delete a listview entry.  The
  1101.     hook routine will be called as follows:
  1102.  
  1103.     rc = hookFunc( hook, object, message );
  1104.     D0           A0    A2      A1
  1105.  
  1106.     APTR         rc;
  1107.     struct Hook    *hook;
  1108.     Object        *object;
  1109.     struct lvRender *message;
  1110.  
  1111.     The message arguments is a pointer to the following data structure:
  1112.  
  1113.     struct lvResource {
  1114.         UWORD        lvr_Command;
  1115.         APTR        lvr_Entry;
  1116.     };
  1117.  
  1118.     lvr_Command -- This can be LVRC_MAKE which means that the  hook should
  1119.         create an entry or it can be  LVRC_KILL  which    means that the
  1120.         hook must dispose of a previously created entry.
  1121.  
  1122.     lvr_Entry -- When this is a LVRC_MAKE command  this contains  the data
  1123.         added  to  the    listview  by  one  of  the  adding  methods or
  1124.         attributes.  When  this  is a LVRC_KILL command this points to
  1125.         whatever LVRC_MAKE has created.
  1126.  
  1127.     The default creating/deletion that is done by the listview expects the
  1128.     entries to be simple string pointers.    Internally these  strings  are
  1129.     copied to an internal buffer when the entry is created. When the entry
  1130.     is disposed of the string copy is simply  de-allocated.   If  you  add
  1131.     entries to the listview which are not string pointers  you must supply
  1132.     your own resource handling using this attribute.
  1133.  
  1134.     EXAMPLE
  1135.  
  1136.     /*
  1137.      *    This example takes a PubScreenNode as input,
  1138.      *    copies the name and adds that to the listview.
  1139.      *    Uppon deletion it simply de-allocates the copy
  1140.      *    of the string.
  1141.      */
  1142.     __saveds __asm APTR
  1143.     hookFunc( register __a0 struct Hook      *hook,
  1144.           register __a2 Object          *object,
  1145.           register __a1 struct lvResource *lvr )
  1146.     {
  1147.         struct PubScreenNode    *psn =
  1148.         ( struct PubScreenNode * )lvr->lvr_Entry;
  1149.         UWORD             len;
  1150.         APTR             rc = NULL;
  1151.  
  1152.         /*
  1153.          *        Built or dispose?
  1154.          */
  1155.         switch ( lvr->lvr_Command ) {
  1156.         case    LVRC_MAKE:
  1157.             /*
  1158.              *        Determine string size.
  1159.              */
  1160.             len = strlen( psn->psn_Node.ln_name ) + 1;
  1161.  
  1162.             /*
  1163.              *        Allocate and copy the string.
  1164.              */
  1165.             if ( rc = ( APTR )AllocVec( len, MEMF_ANY ))
  1166.             strcpy(( UBYTE * )rc, psn->psn_Node.ln_Name );
  1167.             break;
  1168.  
  1169.         case    LVRC_KILL:
  1170.             /*
  1171.              *        Simply de-allocate whats created above.
  1172.              */
  1173.             FreeVec( lvr->lvr_Entry );
  1174.             break;
  1175.         }
  1176.         /*
  1177.          *        'rc' will be a pointer to the created
  1178.          *        string copy or NULL which indicates a
  1179.          *        memory error with LVRC_MAKE. If rc is non-NULL
  1180.          *        the string is added to the list of entries.
  1181.          */
  1182.         return( rc );
  1183.     }
  1184.  
  1185.     The hook must return a pointer to the data created when the command is
  1186.     LVRC_MAKE.  When  the  command    is  LVRC_MAKE and NULL is returned the
  1187.     entry will not be added to the list.
  1188.  
  1189.     LVRC_KILL commands do not have a return code defined.
  1190.  
  1191.     DEFAULT
  1192.     NULL (internal memory handling).
  1193.  
  1194.     APPLICABILITY
  1195.     (I).
  1196.  
  1197.     SEE ALSO
  1198.     LISTV_DisplayHook, LISTV_CompareHook
  1199.  
  1200. listviewclass/LISTV_Select[xxx]
  1201.  
  1202.     NAME
  1203.     LISTV_Select, LISTV_SelectMulti ** V39 ** -- ( ULONG )
  1204.  
  1205.     FUNCTION
  1206.     To select an entry in the list. The entry you select will also be made
  1207.     visible   in   the   display   area.  The data required is the logical
  1208.     number of the entry in the list starting with 0 as the first entry.
  1209.  
  1210.     The following magic numbers are allowed in the tag it's data field:
  1211.  
  1212.     LISTV_Select_First    -- Select the first entry. ** V38 **
  1213.  
  1214.     LISTV_Select_Last     -- Select the last entry. ** V38 **
  1215.  
  1216.     LISTV_Select_Next     -- Select the next  entry.  If there is no entry
  1217.         selected yet the first visible entry is selected. ** V38 **
  1218.  
  1219.     LISTV_Select_Previous -- Select  the  previous entry.    If there is no
  1220.         selected  entry  yet  the  first  visible  entry  is selected.
  1221.         ** V38 **
  1222.  
  1223.     LISTV_Select_Top      -- Select the first visible entry. ** V38 **
  1224.  
  1225.     LISTV_Select_Page_Up  -- Select the entry one page above  the current.
  1226.         If the currently selected entry is not the  top-entry  the top
  1227.         entry will be selected. Otherwise the entry one-page up  minus
  1228.         one is selected. When no entry is selected the    first  visible
  1229.         entry is selected. ** V38 **
  1230.  
  1231.     LISTV_Select_Page_Down -- Select the entry one page below the current.
  1232.         If the currently selected entry is not the   bottom-entry  the
  1233.         bottom entry will be selected.    Otherwise  the    entry one-page
  1234.         down minus one is selected.  When  no  entry  is  selected the
  1235.         first visible entry is selected. ** V38 **
  1236.  
  1237.     LISTV_Select_All -- Selects all entries in the list.  Please note that
  1238.         this  magic  number  will  only  work  on  listviews in multi-
  1239.         selection   mode   and     it   will   only   work   with   the
  1240.         LISTV_SelectMulti and LISTV_SelectMultiNotVisible  attributes.
  1241.         ** V39 **
  1242.  
  1243.     LISTV_SelectMulti  will  select  the  entry  without  deselecting  any
  1244.     previous selected items while LISTV_Select will deselect  any previous
  1245.     selections.
  1246.  
  1247.     APPLICABILITY
  1248.     (SU).
  1249.  
  1250.     SEE ALSO
  1251.     LISTV_SelectNotVisible, LISTV_SelectMultiNotVisible, LISTV_DeSelect
  1252.  
  1253. listviewclass/LISTV_Select[xxx]NotVisible
  1254.  
  1255.     NAME
  1256.     LISTV_SelectNotVisible, LISTV_SelectMultiNotVisible -- ( ULONG )
  1257.     ** V39 **
  1258.  
  1259.     FUNCTION
  1260.     To select an entry in the list.  This attribute works exactly like the
  1261.     LISTV_Select and LISTV_SelectMulti attributes with the exception  that
  1262.     the  selected  entry  is  not  moved into the current view area of the
  1263.     list.
  1264.  
  1265.     APPLICABILITY
  1266.     (SU).
  1267.  
  1268.     SEE ALSO
  1269.     LIST_Select, LISTV_SelectMulti
  1270.  
  1271. listviewclass/LISTV_ShowDropPos
  1272.  
  1273.     NAME
  1274.     LISTV_ShowDropPos -- ( BOOL ) ** V40 **
  1275.  
  1276.     FUNCTION
  1277.     When  set  to  TRUE  in  combination with the baseclass  BT_DropObject
  1278.     and/or BT_DragObject attributes you will create a  Listview  object in
  1279.     which entries can be dropped at a specific location. Example:
  1280.  
  1281.     list = ListviewObject,
  1282.         BT_DragObject,        TRUE,
  1283.         BT_DropObject,        TRUE,
  1284.         LISTV_ShowDropSpot,    TRUE,
  1285.     EndObject;
  1286.  
  1287.     This  creates  a  listview  object  in    which the entries can be moved
  1288.     arround by means of drag and drop. Please look at the supplied example
  1289.     programs to see the possibilities of Listview drag and drop.
  1290.  
  1291.     DEFAULT
  1292.     FALSE.
  1293.  
  1294.     APPLICABILITY
  1295.     (IS).
  1296.  
  1297.     SEE ALSO
  1298.     baseclass.doc/BT_DragObject, baseclass.doc/BT_DropObject,
  1299.     LISTV_DropPos
  1300.  
  1301. listviewclass/LISTV_SortEntryArray
  1302.  
  1303.     NAME
  1304.     LISTV_SortEntryArray -- ( BOOL )
  1305.  
  1306.     FUNCTION
  1307.     To  sort  the  entries    added  at  object  create time. By default the
  1308.     entries  added    with  the LISTV_EntryArray attribute will ocure in the
  1309.     list in the same order as they ocure in the array. When this attribute
  1310.     is set to TRUE these entries will be sorted.
  1311.  
  1312.     DEFAULT
  1313.     FALSE.
  1314.  
  1315.     APPLICABILITY
  1316.     (I).
  1317.  
  1318.     SEE ALSO
  1319.     LISTV_EntryArray
  1320.  
  1321. listviewclass/LISTV_ThinFrames
  1322.  
  1323.     NAME
  1324.     LISTV_ThinFrames -- ( BOOL )
  1325.  
  1326.     FUNCTION
  1327.     To make  all  listview object framing appear as thin frames. This will
  1328.     help you to make an aspect-ratio dependant GUI.
  1329.  
  1330.     DEFAULT
  1331.     FALSE.
  1332.  
  1333.     APPLICABILITY
  1334.     (I).
  1335.  
  1336. listviewclass/LISTV_Title
  1337.  
  1338.     NAME
  1339.     LISTV_Title -- ( UBYTE * )  ** V41 **
  1340.  
  1341.     FUNCTION
  1342.     Set a title for the list.
  1343.     
  1344.     To specify titles with multiple columns, place a tab character between
  1345.     the title strings, like this: "Name\tSize\tDate".
  1346.  
  1347.     DEFAULT
  1348.     NULL.
  1349.  
  1350.     APPLICABILITY
  1351.     (ISG).
  1352.  
  1353. listviewclass/LISTV_TitleHook
  1354.  
  1355.     NAME
  1356.     LISTV_TitleHook -- ( struct Hook * )
  1357.  
  1358.     FUNCTION
  1359.     To  add  a hook to render a title for the list. Multi-column listviews
  1360.     normally  have    a  title  entry which is rendered in the list area but
  1361.     does  not scroll with the list. To support multi-column listviews this
  1362.     hook can be defined which will keep room for a single entry at the top
  1363.     of the list area which is reserved for this purpose.  The hook routine
  1364.     is  called  exactly the same as the LISTV_DisplayHook routine with the
  1365.     exception  that  the  lvr_Entry  field    of the lvRender structure will
  1366.     contain a NULL pointer.
  1367.  
  1368.     DEFAULT
  1369.     NULL (no title).
  1370.  
  1371.     APPLICABILITY
  1372.     (I).
  1373.  
  1374.     SEE ALSO
  1375.     LISTV_DisplayHook
  1376.  
  1377. listviewclass/LISTV_Top
  1378.  
  1379.     NAME
  1380.     LISTV_Top -- ( ULONG )
  1381.  
  1382.     FUNCTION
  1383.     Set the top-entry of the visible part of the list. This tag is    mostly
  1384.     used by the prop object that is connected to  the listview  but it can
  1385.     also  be  controlled by your program. The data of this tag must be the
  1386.     number of the node to set at the top of the visible area.
  1387.  
  1388.     DEFAULT
  1389.     0.
  1390.  
  1391.     APPLICABILITY
  1392.     (ISGU).
  1393.  
  1394. listviewclass/LISTV_ViewBounds
  1395.  
  1396.     NAME
  1397.     LISTV_ViewBounds -- ( struct IBox * ) ** V40 **
  1398.  
  1399.     FUNCTION
  1400.     To query the bounds of the view area of the  listview  object.    Please
  1401.     note that reading this attribute is only  valid  after the  object has
  1402.     been rendered.
  1403.  
  1404.     You will be passes a pointer (READ-ONLY) to a struct IBox in which the
  1405.     bounds of the view area are described.
  1406.  
  1407.     APPLICABILITY
  1408.     (G).
  1409.  
  1410. listviewclass/PGA_NewLook
  1411.  
  1412.     NAME
  1413.     PGA_NewLook -- ( BOOL )
  1414.  
  1415.     FUNCTION
  1416.     To make the scroller of the listview gadget appear in the new look.
  1417.  
  1418.     DEFAULT
  1419.     FALSE.
  1420.  
  1421.     APPLICABILITY
  1422.     (I).
  1423.  
  1424.